package thread;

/**
 * 多线程并发安全问题
 */
public class SyncDemo {
    public static void main(String[] args) {
        Table table=new Table();
        Thread th=new Thread("甲某人"){
            public void run(){
                while (true){
                    int bean=table.getBeans();
                    Thread.yield();//让当前线程从运行状态 转为 就绪状态
                    // ，以允许具有相同优先级的其他线程获得运行机会。就是说当一个线程使用了
                    // 这个方法之后，它就会把自己CPU执行的时间让掉，让自己或者其它的线程运行，注意是让自己或者其他线程运行，并不是单纯的让给其他线程。
                    System.out.println(getName()+":"+bean);
                }
            }
        };
        Thread th2=new Thread("乙某人"){
            public void run(){
                while (true){
                    int bean=table.getBeans();
                    Thread.yield();
                    System.out.println(getName()+":"+bean);
                }
            }
        };
        th.start();
        th2.start();
    }
}
//synchronized排队
class Table{
    private int beans=20;
    public synchronized int  getBeans(){
        if(beans==0){
            throw new RuntimeException("没有豆子了");
        }

        Thread.yield();
        return beans--;
    }
}
